<?php

/*---------------------------------------------
集中各种常用sql字符串拼装以及传码处理函数
主要是针对数组类型，定义简单规则，依次对数组里相关的元素进行传码
---------------------------------------------*/
global $conv_gbk_to_utf8;
$conv_gbk_to_utf8=array('from'=>'GBK','to'=>'UTF-8');
global $conv_utf8_to_gbk;
$conv_utf8_to_gbk=array('from'=>'UTF-8','to'=>'GBK');

include_once('dao_common.php');

function encode_data($data,$de,$charset)
{
	if($charset!='GBK'&&strlen($charset)>0)
	{
		$data = iconv('GBK',$charset,$data);
	}
	if($de=='url')
	{
		$data =  urlencode($data);
	}
	else
	{
		$data = htmlspecialchars($data);
	}
	return $data;
}

function decode_data($data,$de,$charset)
{

	if($de=='url')
	{
		$data =  urldecode($data);
	}
	else
	{
		$data =htmlspecialchars_decode($data);
	}
	if($charset!='GBK'&&strlen($charset)>0)
	{
		$data = iconv($charset,"GBK//IGNORE",$data);
	}
	return $data;
}

//将字符串中的回车换行转义
function  escape_crlf(&$str)
{
	dao_str_replace("\r","\\r",$str);
	dao_str_replace("\n","\\n",$str);
	return $str;
}

//将转义过的回车换行恢复
function  resumeCrlf(&$str)
{
	dao_str_replace("\\r","\r",$str);
	dao_str_replace("\\n","\n",$str);
	return $str;
}

//单一数组的encode
function array_encode(&$datas,$data_encode,$charset)
{
	if(!is_array($datas))
	{
		return ;
	}
	foreach($datas as $key=>$data)
	{
		$datas[$key]= encode_data($data,$data_encode,$charset);
	}
}

//单一数组的decode
function array_decode(&$datas,$data_encode,$charset)
{
	if(!is_array($datas))
	{
		return ;
	}
	foreach($datas as $key=>$data)
	{
		$datas[$key]= decode_data($data,$data_encode,$charset);
	}
}

//二纬数组的encoding/decode
function matrix_encode(&$matrix,$data_encode,$charset)
{
	if(!is_array($matrix))
	{
		return ;
	}
	foreach ($matrix as $key=>$data)
	{
		array_encode($matrix[$key],$data_encode,$charset);
	}
}

function matrix_decode(&$matrix,$data_encode,$charset)
{
	if(!is_array($matrix))
	{
		return ;
	}
	foreach ($matrix as $key=>$data)
	{
		array_decode($matrix[$key],$data_encode,$charset);
	}
}

//iconv转码，第一个数组包含key=>value的值列表,
//第二个数组包含key=>转码规则
//只有在第二个数组里包含规则的才被传码
function array_iconv(&$values,&$convs, $debug=0)
{
	if(!isset($values)||!isset($convs))
	{
		return;
	}
	foreach($convs as $key=>$conv)
	{
		if($debug)
		{
			echo $key."--------------\r\n";
		}
		if(array_key_exists ($key,$values))
		{
			$values[$key]=iconv($conv['from'],$conv['to'],$values[$key]);
		}
	}
}

function array_htmlconv(&$values,&$conv_rules,$debug=0)
{
	if(!isset($values)||!isset($conv_rules))
	{
		return;
	}
	foreach($conv_rules as $key=>$value)
	{
		if(array_key_exists ($key,$values))
		{
			if($debug)
			{
				echo $key."->".$value."\r\n";
			}
			if($value=="en")
			{
				if($debug)
				{
					echo $values[$key]."<--encode-->".htmlspecialchars($values[$key])." \r\n";
				}
				$values[$key]=htmlspecialchars($values[$key]);
			}
			if($value=="de")
			{
				if($debug)
				{
					echo $values[$key]."<--decode-->".html_entity_decode($values[$key])." \r\n";
				}
				$values[$key]=html_entity_decode($values[$key]);
			}
		}
	}
}

//html编码，将文本中的html相关字符转成htm指定特征码如&lt;，
//第一个数组包含key=>value的值列表,
//第二个数组包含需要传码的key
//只有在第二个数组里包含的才被传码
function array_html_encode(&$values,&$elements, $debug=0)
{
	if(!isset($values)||!isset($elements))
	{
		return;
	}
	foreach($elements as $key)
	{
		if(array_key_exists ($key,$values))
		{
			if($debug)
			{
				echo $key."\r\n";
			}
			$values[$key]=htmlspecialchars($values[$key]);
		}
	}
}

//html解码，将文本中的html相关字符转成htm指定特征码如&lt;，
//第一个数组包含key=>value的值列表,
//第二个数组包含需要传码的key
//只有在第二个数组里包含的才被传码
function array_html_decode(&$values,&$elements, $debug=0)
{


	if(!isset($values)||!isset($elements))
	{
		return;
	}
	foreach($elements as $key)
	{
		if(array_key_exists ($key,$values))
		{
			if($debug)
			{
				echo $key."\r\n";
			}
			$values[$key]=html_entity_decode($values[$key]);
		}
	}
}

//依次找出map_key里的key在array里的位置（整数),放到index_key里
function field_to_index(&$field_map,&$fields,&$index_map)
{
	$index_key = array();
	if(!isset($field_map)||!isset($fields))
	{
		return ;
	}
	foreach($field_map as $key=>$value)
	{
		$index = array_search($key,$fields)	;
		if($index===FALSE)
		{
			continue;
		}
		$index_map[$index]=$value;
	}
}
?>